// Copyright 2021 by 马万里. All rights reserved.
// 开发团队 ：   鸡中之霸
// 开发人员 ：   马万里
// 开发时间 ：   2021/2/23 11:25
// 文件名称 ：   task.go
// 工程名称 ：   videostream
// 开发工具 ：   GoLand
//

package taskrunner

import (
	"errors"
	"johnsonsmile.com/videostream/scheduler/dbops"
	"log"
	"os"
	"sync"
)

func deleteVideo(vid string) error {
	//ossfn := "videos/" + vid
	//bn := "avenssi-videos2"
	//ok := ossops.DeleteObject(ossfn, bn)
	return os.Remove("../api/videos/" + vid)

	// if !ok {
	//    log.Printf("Deleting video error, oss operation failed")
	//    return errors.New("Deleting video error")
	//}

	//return nil
}

func VideoClearDispatcher(dc dataChan) error {
	res, err := dbops.ReadVideoDeletionRecord(3)
	if err != nil {
		log.Printf("Video clear dispatcher error: %v", err)
		return err
	}

	if len(res) == 0 {
		return errors.New("All tasks finished")
	}

	for _, id := range res {
		dc <- id
	}
	return nil
}

func VideoClearExecutor(dc dataChan) error {
	errMap := &sync.Map{}
	var err error

forloop:
	for {
		select {
		case vid := <-dc:
			go func(id interface{}) {
				if err := deleteVideo(id.(string)); err != nil {
					errMap.Store(id, err)
					return
				}
				if err := dbops.DelVideoDeletionRecord(id.(string)); err != nil {
					errMap.Store(id, err)
					return
				}
			}(vid)
		default:
			break forloop
		}
	}

	errMap.Range(func(k, v interface{}) bool {
		err = v.(error)
		if err != nil {
			return false
		}
		return true
	})

	return err
}
